/**
 * CardView erzeugt eine grafische Darstellung fuer eine Karte, d.h.
 * einer Instanz des Typs Card.
 *
 * @author Michael Hansen
 * @author Lukas Thuernagel
 * @author Soeren Warszus
 */

package risk.card;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
import java.io.*;
import java.util.*;
import risk.game.*;

public class CardView extends JPanel{
    /**
     * Das zum View dazugehoerige Model.
     */
    private Card card = null;
    
    //Bilddatei anlegen
    private Image img;
    
    private WorldMap wm;
    
    public CardView (Card card){
        
        //Model uebergeben
        this.card = card;
        
        this.setLayout(null);
         
        // eigene Instanz beim Model registrieren
        card.registerView(this);
        // Darstellung initialisieren
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        // Grafikkomponente initialisieren und zum Panel hinzufuegen
        
        //Bei fehler hier erstmal z.B. "Infanterie" zum testen eingeben
        String symbol = card.getSymbol();
        //Pfad muss noch angeglichen werden, nur zum Test
        String path = System.getProperty("java.class.path") + "/risk/images/Karte_"+symbol+".png";
        //String path = new String("C:/Karte_"+symbol+".png");
        
        System.out.println("CardView: "+path);
        
        MediaTracker mt = new MediaTracker(this);
        this.img = Toolkit.getDefaultToolkit().getImage(path);
        mt.addImage(this.img, 0);
        try {
            mt.waitForAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        this.setPreferredSize (new Dimension (img.getWidth(null), 
                                              img.getHeight(null)));
        
        this.setVisible(true);
  
     }

     /**
     * paintComponent schreibt die Laendernamen an die entsprechende
     * Stelle der Karte.
     *
     * @param g  Zeichenflaeche der Karte
     */
     public void paintComponent(Graphics g){
         Graphics2D g2d = (Graphics2D) g;
         g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
         Font myFont=new Font("Times New Roman", Font.BOLD, optimizeStringSize());
         g2d.setFont(myFont);
         g2d.setStroke(new BasicStroke(2.0f));
         Color color = Color.BLACK;
         g2d.setColor(color);
         //bei fehler hier erstmal string statt card.getCountryName() eingeben
         g2d.drawString(card.getCountryName(),14,24);
         repaint();
        
    }
     
    public int optimizeStringSize(){
        
        int fontSize = 14;
        int stringSize = card.getCountryName().length();
        if (stringSize > 16){
            fontSize = 10;
        }
        else if (stringSize >12){
            fontSize = 11;
        }
        else if (stringSize >9){
            fontSize = 12;
        }
        return fontSize;
    }
}